#! /bin/sh
###########################################################################
#                          隐藏tracked的文件                              #
#                                                                         #
#  说明：使文件assume-unchanged，即隐藏：不被git status检测改变           #
#                                                                         #
#  此脚本只用于tracked的文件                                              #
#  使用方法：                                                             #
#            ./hide.sh [PATH] [PATH]...                                   #
#            ./hide.sh [FILE] [FILE]...                                   #
#                  参数可为目录，也可为文件名                             #
#                                                                         #
#  注意：该脚本未对untrack的文件进行检测，若对untrack的文件进行隐藏，     #
#        即便显示成功，实际也是不能隐藏的。若要让git status不检测untrack  #
#        的文件，请在.gitignore加入过滤规则。                             #
###########################################################################
BASE_PATH=${PWD%/src*}'/'
CUR_PATH=$PWD'/'
DATE=$(date +'%Y-%m-%d %H:%M:%S')
echo $CUR_PATH
##如果没有参数，则退出脚本
if [ $# = '0' ];then
  echo '请输入要隐藏的路径或文件名'
  exit 1
fi
echo '========================'${DATE}'========================' | tee -a ${BASE_PATH}hidelog.log
for ((i = 1; i <= $#; i++))
do
  if [ -f ${!i} ];then
    echo '['$(date +'%Y-%m-%d %H:%M:%S')']: 正在隐藏文件'$CUR_PATH${!i} | tee -a ${BASE_PATH}hidelog.log
  else
    echo '['$(date +'%Y-%m-%d %H:%M:%S')']: 正在隐藏文件夹'$CUR_PATH${!i}'中的文件...' | tee -a ${BASE_PATH}hidelog.log
  fi
  git ls-files -v $CUR_PATH${!i} | grep "^H" | sed 's/^..//' | sed 's/\ /\\ /g' | xargs -I FILE git update-index --assume-unchanged FILE || true | tee -a ${BASE_PATH}hidelog.log
  if [ -f ${!i} ];then
    echo '['$(date +'%Y-%m-%d %H:%M:%S')']: 文件'$CUR_PATH${!i}'隐藏完成' | tee -a ${BASE_PATH}hidelog.log
  else
    echo '['$(date +'%Y-%m-%d %H:%M:%S')']: 文件夹'$CUR_PATH${!i}'中的内容隐藏完成' | tee -a ${BASE_PATH}hidelog.log
  fi
done
echo -e '================================END================================\n' | tee -a ${BASE_PATH}hidelog.log
git status
exit 0
